// ESM导入引入和导出的模块是引用关系，修改导入模块的属性会影响导出模块的属性 即 ESM是对导出对象的引用
// CJS导入引入和导出的模块是值关系，修改导入模块的属性不会影响导出模块的属性 即 CJS是对导出对象的复制

// 除了通过在package.json中配置"type": "module"来使用ESM模块导入语法，还可以通过文件扩展名.mjs来使用ESM模块导入语法
// 而commonjs引入可以通过文件扩展名.cjs来使用commonjs模块导入语法

import { num, update } from './esm/public.js'

console.log(num, 'esm')
update()
console.log(num, 'esm')
update()
console.log(num, 'esm')

// 输出结果
// 1 esm
// 2 update
// 2 esm
// 3 update
// 3 esm

const { num: num2, update: update2 } = require('./cjs/public.js')
console.log(num2, 'cjs')
update2()
console.log(num2, 'cjs')
update2()
console.log(num2, 'cjs')

// 输出结果
// 1 cjs
// 2 update
// 1 cjs
// 3 update
// 1 cjs
